package com.nenude.corejava.ch9;

public class StringClass {

	public static void main(String[] args) {
		String s = new String("abc");
		// java 的字符串对象时不可以修改的，每次修改字符串都会分配新的内存空间
		// String 类的修改性能很低
		s = new String("asassdsdsddfsff");
		s = new String("adsfs");
		s = new String("ssdfadaddfa1");

		// -----------------------
		// StringBuffer 具有较高的修改性能；
		// StringBuffer多线程安全类；StringBuilder是多线程不安全的类

		// 面试题：简述String，StringBuffer 和StringBuilder 的异同点；
		/*
		 * String 修改性能低，每次修改会重新分内存空间；StringBuffer 会动态的分配内存空间，可以追加，插入、删除
		 * StringBuffer和StringBuilder功能几乎一样，但是一个是安全的一个是不安全的
		 */

		// 带缓冲的字符串类

		StringBuilder buffer = new StringBuilder();
		// StringBuffer buffer=new StringBuffer();
		buffer.append(false);// append追加
		buffer.append("Hello");
		buffer.insert(5, "ABCDEF");
		// 字符串缓冲的容量
		int cap = buffer.capacity();
		// 数据的长度
		int len = buffer.length();
		System.out.println(cap + ", " + len);
		// 调用一个对象会默认调用这个对象的toString 方法
		System.out.println(buffer);

		System.out.println("============");
		buffer.insert(0, "AB");
		// 字符串缓冲的容量
		cap = buffer.capacity();
		// 数据的长度
		len = buffer.length();
		System.out.println(cap + ", " + len);
		System.out.println(buffer);

		System.out.println("============");
		buffer.deleteCharAt(0);
		buffer.delete(0, 4);
		buffer.trimToSize();// 释放多余的空间；没有使用的空间容量

		// 字符串缓冲的容量
		cap = buffer.capacity();
		// 数据的长度
		len = buffer.length();
		System.out.println(cap + ", " + len);
		System.out.println(buffer);

		System.out.println("==========");
		cap = buffer.capacity();
		len = buffer.length();
		System.out.println(cap + ", " + len);
		buffer.replace(0, 1, "a");

		// reverse 反向输出
		System.out.println(buffer);
		System.out.println("反转    " + buffer.reverse());

	}

}
